package com.gxa.xiaoucomeshome.mapper;

import com.gxa.xiaoucomeshome.pojo.*;
import com.gxa.xiaoucomeshome.vo.AdminRoleVo;
import com.gxa.xiaoucomeshome.vo.InfoVo;
import com.gxa.xiaoucomeshome.vo.ManagerVo;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Map;

public interface AdminMapper {
    /**
     * 超级管理员登录
     *
     * @param admin_phone
     * @param admin_pwd
     * @return
     */
    Admin adminLogin(@Param("admin_phone") String admin_phone,
                     @Param("admin_pwd") String admin_pwd);

    /**
     * 展示首页数据
     *
     * @return
     */
    InfoVo showInfo();

    /**
     * 添加用户协议
     *
     * @param agree_desc
     */
    void userAgree(String agree_desc);

    /**
     * 名字模糊查询分页展示
     *
     * @param page
     * @param size
     * @param site_name
     * @return
     */
    List<Site> selectSites(@Param("page") Integer page,
                           @Param("size") Integer size,
                           @Param("site_name") String site_name);

    /**
     * 查询站点数量
     *
     * @param site_name
     * @return
     */
    int selectSitesCount(@Param("site_name") String site_name);

    /**
     * 站点批量删除
     *
     * @param site_id
     * @return
     */
    int deleteSite(String[] site_id);

    /**
     * 单个删除站点
     *
     * @param site_id
     * @return
     */
    int deleteSiteById(Integer site_id);

    /**
     * 根据编号查询站点
     *
     * @param site_id
     * @return
     */
    Site selectSiteById(Integer site_id);

    /**
     * 添加站点
     */
    void addSite(@Param("site_name") String site_name,
                 @Param("site_phone") String site_phone,
                 @Param("site_spare_phone") String site_spare_phone,
                 @Param("site_desc") String site_desc,
                 @Param("site_start_time") Date site_start_time,
                 @Param("site_end_time") Date site_end_time,
                 @Param("site_address") String site_address,
                 @Param("site_ambient_desc") String site_ambient_desc,
                 @Param("site_ambient_range") Double site_ambient_range,
                 @Param("site_ambient_state") Integer site_ambient_state,
                 @Param("site_fresh_desc") String site_fresh_desc,
                 @Param("site_fresh_range") Double site_fresh_range,
                 @Param("site_fresh_state") Integer site_fresh_state);

    /**
     * 添加站员
     *
     * @param manager
     */
    void addManager(Manager manager);

    List<SiteAddress> selectAddress();

    List<Courier> selectCourier(@Param("page") Integer page, @Param("size") Integer size, @Param("phone") String phone, @Param("state") Integer state);

    int selectCourierCount(@Param("phone") String phone, @Param("state") Integer state);

//    修改站点信息
    void editSite(@Param("site_id") Integer site_id,
                  @Param("site_name") String site_name,
                  @Param("site_phone") String site_phone,
                  @Param("site_spare_phone") String site_spare_phone,
                  @Param("site_desc") String site_desc,
                  @Param("site_start_time") Date site_start_time,
                  @Param("site_end_time") Date site_end_time,
                  @Param("site_address") String site_address,
                  @Param("site_ambient_desc") String site_ambient_desc,
                  @Param("site_ambient_range") Double site_ambient_range,
                  @Param("site_ambient_state") Integer site_ambient_state,
                  @Param("site_fresh_desc") String site_fresh_desc,
                  @Param("site_fresh_range") Double site_fresh_range,
                  @Param("site_fresh_state") Integer site_fresh_state);

    List<Manager> selectManager(@Param("page") Integer page, @Param("size") Integer size, @Param("phone") String phone);

    int selectManagerCount(String phone);

    void editManager(@Param("mgr_name") String mgr_name,
                     @Param("mgr_phone") String mgr_phone,
                     @Param("mgr_site") String mgr_site,
                     @Param("mgr_id") Integer mgr_id);

    /**
     * 站员批量删除
     *
     * @param mgr_id
     * @return
     */
    int deleteManager(String[] mgr_id);

    /**
     * 根据编号删除站员
     *
     * @param mgr_id
     * @return
     */
    int deleteManagerById(Integer mgr_id);

    /**
     * 查询所有交通工具
     *
     * @return
     */
    List<Courier> selectVehicle();

    /**
     * 添加配送员
     *
     * @param phone
     * @param password
     * @param coname
     * @param gender
     * @param age
     * @param vehicle
     * @param drivingPermit
     * @param idCard
     * @param drivingLicense
     * @param source
     */
    int addCourice(@Param("phone") String phone,
                    @Param("password") String password,
                    @Param("coname") String coname,
                    @Param("gender") String gender,
                    @Param("age") Integer age,
                    @Param("vehicle") String vehicle,
                    @Param("drivingPermit") String drivingPermit,
                    @Param("idCard") String idCard,
                    @Param("drivingLicense") String drivingLicense,
                    @Param("source") String source);

    /**
     * 查询所有门店名
     *
     * @return
     */
    List<Site> selectSiteName();

    /**
     * 配送员批量删除
     *
     * @param phone
     * @return
     */
    int courierDelete(String[] phone);

    /**
     * 修改配送员信息
     *
     * @param phone
     * @param password
     * @param coname
     * @param gender
     * @param age
     * @param vehicle
     * @param drivingPermit
     * @param idCard
     * @param drivingLicense
     * @param source
     */
    void editCourier(@Param("newPhone") String newPhone,
                     @Param("password") String password,
                     @Param("coname") String coname,
                     @Param("gender") String gender,
                     @Param("age") String age,
                     @Param("vehicle") String vehicle,
                     @Param("drivingPermit") String drivingPermit,
                     @Param("idCard") String idCard,
                     @Param("drivingLicense") String drivingLicense,
                     @Param("source") String source,
                     @Param("phone") String phone);

    /**
     * 配送员批量冻结
     * @param phone
     * @return
     */
    int freezeCourier(String[] phone);
    /**
     * 配送员批量解冻
     * @param phone
     * @return
     */
    int thawCourier(String[] phone);

    /**
     * 根据编号查询密码
     * @param adminId
     * @return
     */
    String selectPwdById(Integer adminId);


    /**
     * 修改密码
     * @param adminId
     * @param newPassword
     * @return
     */
    int updatePwd(@Param("adminId") Integer adminId,
                  @Param("newPassword") String newPassword);

    /**
     *根据编号查询站员
     * @param mgr_id
     * @return
     */
    ManagerVo selectManagerById(Integer mgr_id);

    /**
     * 根据电话查询配送员
     * @param phone
     * @return
     */
    Courier selectCourierByPhone(String phone);

    /**
     * 查询父类商品
     * @return
     */
    List<Commodity> selectCommodity();

    /**
     * 查询父类商品下的所有子类
     */
    List<GoodsChild> goodsChildList(@Param("page") Integer page,@Param("size") Integer size,@Param("id") Integer id,@Param("goods_child_name") String goods_child_name);

    /**
     * 查询商品数量
     * @param id
     * @param goods_child_name
     * @return
     */
    int selectGoodsChildCount(@Param("id") int id,@Param("goods_child_name") String goods_child_name);

    /**
     * 修改父类信息
     * @param commodity_name
     * @return
     */
    int updateGoods(@Param("commodity_name") String commodity_name,@Param("id") Integer id);

    /**
     * 根据电话删除配送员
     * @param phone
     * @return
     */
    int courierDeleteByPhone(String phone);

    /**
     * 根据电话冻结配送员
     * @param phone
     * @return
     */
    int freezeCourierByPhone(String phone);
    /**
     * 根据电话解冻配送员
     * @param phone
     * @return
     */
    int nofreezeCourierByPhone(String phone);

    /**
     *修改子类商品信息
     * @param goods_child_name
     * @param goods_child_id
     * @return
     */
    int updateGoodsChild(@Param("goods_child_name") String goods_child_name,
                         @Param("goods_child_id") Integer goods_child_id,
                         @Param("goods_id")Integer goods_id);

    /**
     * 删除子类商品
     * @param goods_child_id
     * @return
     */
    int deleteGoodsChild(Integer goods_child_id);

    /**
     * 添加父类对象
     * @param commodity_name
     * @return
     */
    int addGoods(String commodity_name);
    /**
     * 添加子类对象
     * @param goods_child_name
     * @return
     */
    int addGoodsChild(@Param("goods_child_name") String goods_child_name,
                      @Param("goods_id") Integer goods_id);


    /**
     * 查询角色
     * @param page
     * @param size
     * @param role_name
     * @return
     */
    List<Role> selectRole(@Param("page") Integer page,
                          @Param("size")Integer size,
                          @Param("role_name") String role_name);

    //角色总数
    Integer selectRoleCount( @Param("role_name") String role_name);
    /**
     * 根据id删除角色
     * @param role_id
     * @return
     */
    int deleteRole(Integer role_id);

    /**
     * 修改角色
     * @param role_name
     * @param role_desc
     * @param role_id
     * @return
     */
    int updateRole(@Param("role_name") String role_name,
                   @Param("role_desc") String role_desc,
                   @Param("role_id") Integer role_id);

    /**
     * 查询所有菜单
     * @return
     */
    List<Menu> selectMenu();

    /**
     * 添加角色
     * @param role_name
     * @param role_desc
     */
    void addRole(@Param("role_name") String role_name,
                 @Param("role_desc") String role_desc);


    /**
     * 查询操作员
     * @param page
     * @return
     */
    List<AdminRoleVo> selectAdminRole(@Param("page") Integer page,
                                      @Param("size") Integer size,
                                      @Param("manage") String manage,
                                      @Param("role_id") Integer role_id);

    //所有操作员
    Integer selectAdminRoleCount(
            @Param("manage") String manage,
            @Param("role_id") Integer role_id);

    /**
     * 新增操作员
     */
    void addAdminRole(@Param("admin_phone") String admin_phone,
                      @Param("admin_name") String admin_name,
                      @Param("role_id") Integer role_id);

    /**
     * 删除操作员
     * @return
     */
    int deleteAdminRole(Integer admin_id);

    /**
     * 修改操作员
     * @return
     */
    int updateAdminRole(@Param("admin_phone")String admin_phone,
                        @Param("admin_name")String admin_name,
                        @Param("role_id")Integer role_id,
                        @Param("admin_id")Integer admin_id);


    /**
     * 重置密码
     * @param admin_id
     * @return
     */
    int updatePasswordAdmin(Integer admin_id);


}
